home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 011-020 / amok19 / area / area.dok < prev    next >
Text File  |  1993-11-04  |  2KB  |  54 lines

  1. ===========================================================
  2. Dokumentation des Moduls Area V1.0    Bernd Preusing 7.5.89
  3. ===========================================================
  4.  
  5. Das Modul Area enstand aus drei Gründen:
  6.  
  7. a) ist es nicht ganz trivial, einen RastPort für Area-Operationen
  8.    zu initialisieren.
  9. b) liefern die Area-Funktionen der graphics.library ein Ergebnis,
  10.    das immer überprüft oder ignoriert werden muß.
  11. c) enthält die grahics.library einen (haha!) Fehler, der immer
  12.    dann auftritt, wenn nacheinander Polygone und Ellipsen gefüllt
  13.    werden, was in die tollsten Abstürze mündet.
  14.  
  15. Für a) (Initialisierung) gibt es nun:
  16.  
  17. PROCEDURE InitArea(Rp: RastPortPtr; MaxVectors: INTEGER; Alloc: AllocProc);
  18. (*    :Input.   Rp: zu initialisierender RastPort
  19.     :Input.   MaxVectors: maximale Punktzahl vor AreaEnd. Falls
  20.     :Input.              mehr benötigt werden: Assert.
  21.     :Input.              Eine Ellipse benötigt nur 2 Punkte, 20
  22.     :Input.              bis 50 reicht also allemal!
  23.     :Input.   Alloc: Prozedur zur Speicheranforderung (z.B. Heap.AllocMem)
  24.     :Semantic. Der RastPort wird für Area-Operationen initialisiert,
  25.     :Semantic. alle nötigen Puffer werden alloziert. Die Verantwortung
  26.     :Semantic. für die Speicherfreigabe muß eine TermProcedure tragen!
  27. *)
  28.  
  29. Man ruft also einfach EINMAL z.B. 'InitArea(MyRastPort,50,AllocMem)'
  30. auf, und schon sind die tollsten Fülleffekte möglich. Siehe hierzu auch
  31. die Module LoPattern und HiPattern!
  32.  
  33.  
  34. Für b) (Resultate) sind da:
  35.  
  36. PROCEDURE AreaMove(Rp: RastPortPtr; x,y: INTEGER);
  37. PROCEDURE AreaDraw(Rp: RastPortPtr; x,y: INTEGER);
  38. PROCEDURE AreaEllipse(Rp: RastPortPtr; mx,my,rx,ry: INTEGER);
  39. PROCEDURE AreaCircle(Rp: RastPortPtr; mx,my, r: INTEGER);
  40. PROCEDURE AreaEnd(Rp: RastPortPtr);
  41.  
  42. Diese sind genau wie die der graphics.library, liefern jedoch kein
  43. Ergebnis, sondern im Fehlerfalle ein Arts.Assert.
  44.  
  45. AreaEnd bereinigt zusätzlich einen Puffer, womit Fehler c) ausge-
  46. schlossen wird.
  47.  
  48. Leider gibt es aber noch einen (haha!) Fehler, den ich noch nicht
  49. genau lokalisieren konnte:
  50. Trotz 'geclipptem' RastPort (z.B. Window) gibt es MANCHMAL Abstürze,
  51. wenn Fülloperationen ganz oder teilweise außerhalb der Grenzen
  52. stattfinden. Diese treten jedoch sinnigerweise meist erst etwas
  53. später in Erscheinung, was sie um so tragischer macht.
  54.